home *** CD-ROM | disk | FTP | other *** search
- ; > &.Doc180.Kernel.ModeExtend
-
- Title: Mode extensions/1
- Version: 0.02
- Started: 21-Mar-88
- Last updated: 28-Sep-88
-
- In RISC OS 2.00 it is possible to load modules which provide additional
- screen modes and additional monitor types. To provide this facility a number
- of new services are offered:-
-
- Service_ModeExtension (&50)
- ---------------------------
-
- in: R1 = Service_ModeExtension
- R2 = mode number that information is requested for
- R3 = monitor type (or -1 for don't care)
-
- out: (If not claimed)
- All registers preserved
-
- (If claimed)
- R1 = 0
- R2 preserved
- R3 -> VIDC list
- R4 -> workspace list
-
- Format of VIDC list (all word values)
- -------------------------------------
-
- Offset Value
-
- 0 0 (indicates format of list, to allow for new VIDCs at a
- later date)
- 4 VIDC base mode
- 8 VIDC parameter
- 12 VIDC parameter
- . .
- . .
- n -1
-
- The VIDC base mode is the number of an existing operating system screen mode
- which is used to determine the values of VIDC registers not explicitly
- mentioned in the list. The VIDC parameters are in the form that would be
- written to the hardware ie the top 6 bits specify which register is
- programmed and the remainder specify the value to be programmed in that
- register. However, bits 6 and 7 of the control register should be set to 0 as
- these will be modified by the MOS to take the configured sync and the *TV
- interlace setting into account. Similarly the vertical parameters for border
- start, display start, display end and border end are modified by the MOS to
- take the *TV vertical offset into account.
-
- VIDC parameters below &80000000 are ignored, since these correspond to
- palette registers (determined by the workspace base mode) and sound registers
- (not part of the display system).
-
- Format of workspace list (all word values)
- ------------------------------------------
-
- Offset Value
-
- 0 0 (indicates format of list)
- 4 Workspace base mode
- 8 Mode variable index
- 12 Mode variable value
- 16 Mode variable index
- 20 Mode variable value
- . .
- . .
- n -1
-
- The workspace base mode is the number of an existing operating system screen
- mode which is used to determine the values of mode variables not explicitly
- mentioned in the list. The mode variable indices are the same as for
- SWI OS_ReadModeVariable.
-
- Note: for the palette to be set properly, a workspace base mode should be
- chosen which has the appropriate palette.
-
- When the service is received, the module should check that R2 contains a mode
- that it knows about and that R3 holds a monitor type that is suitable for
- that mode. If not, the service should be passed on. If R3 holds -1 then the
- MOS is making a general enquiry about that mode (eg to determine the attributes
- of a sprite defined in that mode) so the module should only check R2.
-
- Note that it is possible for a mode to have two or more different sets of
- VIDC parameters for different monitor types, but the workspace parameters
- MUST be the same, as the mode number is used as an identifier in sprites and
- in calls such as OS_ReadModeVariable.
-
-
- Service_ModeTranslation (&51)
- -----------------------------
-
- in: R1 = Service_ModeTranslation
- R2 = mode number that requires translation
- R3 = monitor type
-
- out: (If not claimed)
- All registers preserved
-
- (If claimed)
- R1 = 0
- R2 = substitute mode
- R3 preserved
-
- This service is offered during a call to OS_CheckModeValid or a screen mode
- change, if the selected mode is not available with the current monitor type
- (this having been ascertained by offering Service_ModeExtension) and the
- monitor type is not one known to the MOS (ie not in the range 0..3). If the
- monitor type passed in R3 is known to the module, then the module should
- discover what the attributes of the mode in R2 are (by calling
- ReadModeVariable) and then choose a mode which is suitable for this monitor
- type and is closest in attributes to the selected mode. This mode number
- should be returned in R2.
-
- Service_PreModeChange (&4D)
- ---------------------------
-
- in: R1 = Service_PreModeChange
- R2 = selected mode (before possible translation)
-
- out: (Case 1)
- All registers preserved
- This is the normal action for a module which does not want to
- interfere.
-
- (Case 2)
- R1 = 0 (service claimed)
- R0 = 0
- This implies that the module does not want the mode change to take
- place, and has taken an alternative action.
-
- (Case 3)
- R1 = 0 (service claimed)
- R0 -> error block
- This implies that the module does not want the mode change to take
- place, and wishes to return the error pointed to by R0
-
- (Case 4 - possibly to be removed)
- R1 preserved
- R2 = new mode
- This implies that the module wants to substitute a mode for the
- specified mode. This is not a very good way of doing it, as other
- modules further down the chain will be offered the service with this
- new mode. The Service_ModeTranslation mechanism described above should
- be used by modules providing new monitor types.
-